package cn.hibernatedemo.biz;

import cn.hibernatedemo.dao.EmpDao;
import cn.hibernatedemo.dao.HibernateUtil;
import cn.hibernatedemo.entity.Dept;
import cn.hibernatedemo.entity.Emp;
import cn.hibernatedemo.entity.EmpCondition;
import org.hibernate.Transaction;

import java.util.List;

public class EmpBiz {
    public List<Emp> getListByConditon(EmpCondition empCondition){
        Transaction tx=null;
        List<Emp> emps=null;
        try {
            tx= HibernateUtil.currentSession().beginTransaction();
            StringBuilder hql=new StringBuilder("from Emp as emp where 1=1");
            if(empCondition.getJob()!=null&&empCondition.getJob().length()>0){
                hql.append(" and emp.job=:job");
            }
            if(empCondition.getSal()!=null&&empCondition.getSal()!=0){
                hql.append(" and emp.sal>:sal");
            }
            if(null!=empCondition.getHireStartDate()){
                hql.append(" and emp.hiredate>:hireStartDate");
            }
            if(null!=empCondition.getHireEndDate()){
                hql.append(" and emp.hiredate<:hireEndDate");
            }
            emps=new EmpDao().getEmpsByConditions(hql.toString(),empCondition);
            tx.commit();
        }catch (Exception e){
            e.printStackTrace();
            if(tx!=null){
                tx.rollback();
            }
        }
        return emps;
    }

    public Long getCount(Float sal){
        Transaction tx=null;
        Long count=null;
        try {
            tx= HibernateUtil.currentSession().beginTransaction();
            count=new EmpDao().getEmpsByConditions(sal);
            tx.commit();
        }catch (Exception e){
            e.printStackTrace();
            if(tx!=null){
                tx.rollback();
            }
        }
        return count;
    }
    public List<Emp> getEmpPage(Integer pageIndex,Integer pageSize){
        Transaction tx=null;
        List<Emp> emps=null;
        try {
            tx= HibernateUtil.currentSession().beginTransaction();
            emps=new EmpDao().getEmpPage(pageIndex,pageSize);
            tx.commit();
        }catch (Exception e){
            e.printStackTrace();
            if(tx!=null){
                tx.rollback();
            }
        }
        return emps;
    }
    public List<String> getEmpName( ){
        Transaction tx=null;
        List<String> emps=null;
        try {
            tx= HibernateUtil.currentSession().beginTransaction();
            emps=new EmpDao().getdnames();
            tx.commit();
        }catch (Exception e){
            e.printStackTrace();
            if(tx!=null){
                tx.rollback();
            }
        }
        return emps;
    }
    public List<Object[]> getObject( ){
        Transaction tx=null;
        List<Object[]> emps=null;
        try {
            tx= HibernateUtil.currentSession().beginTransaction();
            emps=new EmpDao().getObject();
            tx.commit();
        }catch (Exception e){
            e.printStackTrace();
            if(tx!=null){
                tx.rollback();
            }
        }
        return emps;
    }

    public List<Emp> getEmps( ){
        Transaction tx=null;
        List<Emp> emps=null;
        try {
            tx= HibernateUtil.currentSession().beginTransaction();
            emps=new EmpDao().getEmps();
            tx.commit();
        }catch (Exception e){
            e.printStackTrace();
            if(tx!=null){
                tx.rollback();
            }
        }
        return emps;
    }

    public void addEmp(Emp emp){
        Transaction tx=null;

        try {
            tx= HibernateUtil.currentSession().beginTransaction();
            new EmpDao().addEmp(emp);
            tx.commit();
        }catch (Exception e){
            e.printStackTrace();
            if(tx!=null){
                tx.rollback();
            }
        }
    }
    public List<Emp> getEmps(Dept dept){
        Transaction tx=null;
        List<Emp> emps=null;
        try {
            tx= HibernateUtil.currentSession().beginTransaction();
            emps=new EmpDao().findByDept(dept);
            tx.commit();
        }catch (Exception e){
            e.printStackTrace();
            if(tx!=null){
                tx.rollback();
            }
        }
        return emps;
    }

    public List<Emp> getEmpDept( ){
        Transaction tx=null;
        List<Emp> emps=null;
        try {
            tx= HibernateUtil.currentSession().beginTransaction();
            emps=new EmpDao().findEmps();
            for(Emp e:emps){
                System.out.println(e.getEmpName()+"====>"+e.getJob()+"====>"+e.getDept().getDeptName());
            }
            tx.commit();
        }catch (Exception e){
            e.printStackTrace();
            if(tx!=null){
                tx.rollback();
            }
        }
        return emps;
    }
}
